/*
 * HashExtensibleRss.h
 *
 *  Created on: 02/05/2014
 *      Author: ariel
 */

#ifndef HASHEXTENSIBLERSS_H_
#define HASHEXTENSIBLERSS_H_

#include <iostream>
using namespace std;
#include "BloqueRss.h"
#include "Utils.h"
#include "../../physical_layer/Archivo.h"
#include "../entities/Rss.h"
#include "../../utils/utiles.h"
#include "../../physical_layer/IDGenerator.h"

#include "../../logical_layer/parser/RssParser.h"
#include "../../utils/ConfigurationMannagerPool.h"

class HashExtensibleRss {
private:
	Archivo* file_hash;
	Archivo* file_freeSpaces;
	Archivo* file_table;

public:
	HashExtensibleRss();
	virtual ~HashExtensibleRss();

	vector<int> getTable();
	vector<int> getIdblocksLibres();
	void setTable(vector<int> table);
	void setfreeSpaces(vector<int> bloquesLibres);

	//devuelve el bloque que contiene el registro pasado por parametro
	BloqueRss* search(Rss* registro);
	Rss* searchRss(Rss* registro);

	Archivo* getFileFreeSpaces();
	Archivo* getFileHash();
	Archivo* getFileTable();

	void agregarEnArchivo(BloqueRss* bloque);
	BloqueRss* leerDeArchivo(int nroBloque);
	void updateBlockEnArchivo(BloqueRss* bloque);

	void agregarNroBloqueLibreEnArchivo(int nroBloqueLibre);
	int leerUnNroBloqueLibre();

	void reportBloques();

	bool  doHashingAdd(Rss* registro);
	bool doHashingDelete(Rss* registro);

	void exportar();

private:

	bool dispersar(ElementoRss* Elemento_add, int pos_Bloque_inTable, BloqueRss* Bloque_found);
};

#endif /* HASHEXTENSIBLERSS_H_ */
